#ifndef __PERSONAJE_H__
#define __PERSONAJE_H__

#include "Textura.h"
#include "TexturasPersonaje.h"
#include "ObjetoVivo.h"

using namespace std;

/**
 * Clase cuya instancia representa un personaje a mostrar en la pantalla
 */
class Personaje{

private:
	
	string* id;
	ObjetoVivo* objeto;
	int precedencia ;
	static int PRECEDENCIA_CONT;

	// Es distinto del de ObjetoVivo, en realidad uno dispara el otro.
	// El de ObjetoVivo me dice que lo tengo que borrar de la pantalla
	// Este flag me dice que no lo tengo que dibujar mas.
	bool muerto;

protected :
	bool movimientoAutomatico ;
	Textura* textura;
	TexturasPersonaje* texturas;

	// Lo necesito para saber el lugar que ocupaba antes
	SDL_Rect* rectanguloPrevio;

	// "coord" sera el punto x o y de un Punto , "medida" sera el alto o el ancho
	// Retorna el pixel correspondiente
	int getValueByPosicion(int coord, int medida);

	int getPrecedencia();

public:
	
	Personaje(TexturasPersonaje* texturas, ObjetoVivo* objeto ,const string& id);

	int getFila();
	int getColumna();
	string getId();
	Textura* getTextura();
	ObjetoVivo* getObjeto();
	
	bool dibujarArriba(Personaje* otro);

	int getAncho();
	int getAlto();

	void morir();
	void vivir();
	bool isMuerto();

	SDL_Rect* getRectanguloPrevio();

	virtual void calcularNuevaTextura() = 0;
	
	bool equals(Personaje* otroPersonaje);
	~Personaje();


};

#endif